package com.jy.wms.service;

import com.github.pagehelper.PageHelper;
import com.jy.wms.common.annotions.BaseServiceDescribe;
import com.jy.wms.common.base.BaseService;
import com.jy.wms.common.base.Pageing;
import com.jy.wms.common.base.ServiceException;
import com.jy.wms.common.base.SucessException;
import com.jy.wms.dao.WmsLibraryPositionMapper;
import com.jy.wms.pojo.SysDictionary;
import com.jy.wms.pojo.WmsLibraryArea;
import com.jy.wms.pojo.WmsLibraryPosition;
import com.jy.wms.pojo.WmsWarehouse;
import net.sf.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
* @ClassName: WmsLibraryPositionService.java
 * @Description: 库位管理
* @Author yjs
* @Date Tue Aug 29 15:58:05 GMT+08:00 2017
*/

@Service
public class WmsLibraryPositionService extends BaseService<WmsLibraryPositionMapper,WmsLibraryPosition> {
    @Autowired
    private SysDictionaryService sysDictionaryService;
 /**
 * 插入一条记录
 * @param entity 实体对象
 * @return int
 */
 @BaseServiceDescribe(moduleName = "库位管理",btnName = "新增库位")
public void baseInsert(WmsLibraryPosition entity ) throws Exception {
     //0 存储库位 1件拣货库位 2箱拣货库位 3箱/件拣货库位 4暂存库位 5集货库位 6组装工作库位
     if ("4".equals(entity.getLx())) {
         //是否可以货品混放 0不可 1允许
         if ("1".equals(entity.getHphf())) {
             //同货品批次是否可以混放 0不可 1允许;
             if ("1".equals(entity.getPchf())) {
                 save(entity);
             } else {
                 throw new ServiceException("暂存库位货品批次允许混放");
             }
         } else {
             throw new ServiceException("暂存库位货品允许混放");
         }
     } else if ("5".equals(entity.getLx())) {
         //同货品批次是否可以混放 0不可 1允许;是否可以货品混放 0不可 1允许
         if ("1".equals(entity.getHphf())) {
             if ("1".equals(entity.getPchf())) {
                 save(entity);
             } else {
                 throw new ServiceException("集货库位货品批次允许混放");
             }
         } else {
             throw new ServiceException("集货库位货品允许混放");
         }
     } else {
         save(entity);
     }
 }

    /**
     * 添加保存库位
     *
     * @param entity
     * @throws Exception
     */
    public void save(WmsLibraryPosition entity) throws Exception {
        Integer i = dao.baseInsert(entity);
        if (i > 0) {
            throw new SucessException("新增库位成功");
        } else {
            throw new ServiceException("新增库位失败");
        }
    }
    /**
     * id查询库区名称
     * @param sskqid
     * @return
     */
public WmsLibraryArea searchKQ(String sskqid, String ckid){
    return dao.searchKQ( sskqid ,ckid);
}
/**
* 插入一条记录（匹配有值的字段）
* @param entity 实体对象
* @return int
*/
public Integer baseInsertSelective(WmsLibraryPosition entity ){
     return dao.baseInsertSelective( entity );
}

/**
* 删除（根据主键ID删除）
* @param id 主键
* @return int
*/
public Integer baseDeleteByPrimaryKey(String id ){
     return dao.baseDeleteByPrimaryKey( id );
}

/**
* 删除（根据ID 批量删除）
* @param idList 主键ID列表
* @return int
*/
@BaseServiceDescribe(moduleName = "库位管理",btnName = "删除库位")
public void baseDeleteBathPrimaryKeys(List<String> idList, String hzid, String ckid) throws Exception {
    for (String id : idList) {
        WmsLibraryPosition wmsLibraryPosition = dao.baseSelectByPrimaryKey(id, ckid, hzid);
        if (wmsLibraryPosition == null) {
            throw new ServiceException("该库位不属于本货主或已被占用,不可删除");
        }
    }
   Integer i = dao.baseDeleteBathPrimaryKeys( idList );
   if(i>0){
       throw new SucessException("删除库位成功");
   }else{
       throw new ServiceException("库位正在使用,不可删除");
   }
}

/**
* 分页查询
* @param entity 实体
* @return Page<WmsLibraryPosition>
*/
@BaseServiceDescribe(moduleName = "库位管理",btnName = "分页查询库位")
public JSONObject baseSelectPage(WmsLibraryPosition entity ) throws ServiceException {
    try{
        JSONObject jsonObject=new JSONObject();
        Integer count=dao.baseSelectCount( entity);
        Pageing pageing= Pageing.getPageing(entity.getPage(),entity.getRows());
        //PageHelper.startPage(entity.getPage(),entity.getRows());
        List<WmsLibraryPosition> list=dao.baseSelectPage( entity,pageing.getPage(),pageing.getRows());
        jsonObject.put("count",count);
        jsonObject.put("list",list);
        return jsonObject;
    }catch(Exception e){
        throw new ServiceException("查询库位失败",e);
    }
}

/**
* 查询（根据主键ID查询）
* @param id 主键ID
* @return WmsLibraryPosition
*/
public WmsLibraryPosition baseSelectByPrimaryKey(String id, String ckid ){
    return dao.baseSelectByPrimaryKey(id, ckid, null);
}

/**
* 查询（根据ID 批量查询）
* @param idList 主键ID列表
* @return list
*/
public Integer baseSelectBathPrimaryKeys(List<WmsLibraryPosition> idList ){
     return dao.baseSelectBathPrimaryKeys( idList );
}

/**
*修改 （匹配有值的字段）
* @param entity 主键ID列表
* @return int
*/
@BaseServiceDescribe(moduleName = "库位管理",btnName = "编辑库位")
public void baseUpdateByPrimaryKeySelective( WmsLibraryPosition entity ) throws Exception {
    WmsLibraryPosition wmsLibraryPosition = dao.baseSelectByPrimaryKey(entity.getId(), entity.getCkid(), entity.getSshzid());
    if (wmsLibraryPosition != null) {
        //0 存储库位 1件拣货库位 2箱拣货库位 3箱/件拣货库位 4暂存库位 5集货库位 6组装工作库位
        if ("4".equals(entity.getLx())) {
            //是否可以货品混放 0不可 1允许
            if ("1".equals(entity.getHphf())) {
                //同货品批次是否可以混放 0不可 1允许;
                if ("1".equals(entity.getPchf())) {
                    updateKw(entity);
                } else {
                    throw new ServiceException("暂存库位货品批次允许混放");
                }
            } else {
                throw new ServiceException("暂存库位货品允许混放");
            }
        } else if ("5".equals(entity.getLx())) {
            //同货品批次是否可以混放 0不可 1允许;是否可以货品混放 0不可 1允许
            if ("1".equals(entity.getHphf())) {
                if ("1".equals(entity.getPchf())) {
                    updateKw(entity);
                } else {
                    throw new ServiceException("集货库位货品批次允许混放");
                }
            } else {
                throw new ServiceException("集货库位货品允许混放");
            }
        } else {
            updateKw(entity);
        }
    } else {
        throw new ServiceException("该库位不属于本货主或已被占用,不可修改");
    }
}

    /**
     * 编辑库位保存
     *
     * @param entity
     * @throws Exception
     */
    public void updateKw(WmsLibraryPosition entity) throws Exception {
        Integer i = dao.baseUpdateByPrimaryKeySelective(entity);
        if (i > 0) {
            throw new SucessException("编辑库位成功");
        } else {
            throw new ServiceException("编辑库位失败");
        }
}
/**
*修改（根据主键ID修改）
* @param entity 主键ID列表
* @return int
*/
public Integer baseUpdateByPrimaryKey(WmsLibraryPosition entity ){
     return dao.baseUpdateByPrimaryKey( entity );
}

    /**
     * 修改（根据ID 批量修改）
     * @param idList 主键ID列表
     * @return int
     */
    public Integer baseUpdateByPrimaryKeys(List<String> idList, String hzId ){
        return dao.baseUpdateByPrimaryKeys( idList,hzId );
    }

/**
 *查询空余库位
 * @return int
 */
 public List<WmsLibraryPosition> selectPostion(String ckid){
    return dao.selectPostion(ckid);
 }

    /**
     * 根据货主ID查询货主拥有的库位
     * @param sshzid    货主ID
     * @return
     */
    public List<WmsLibraryPosition> selectPostionBySshzid(String sshzid){
        return dao.selectPostionBySshzid(sshzid);
    }

    /**
     * 查询货主拥有的及空闲的库位
     * @param sshzid    货主ID
     * @return
     */
    public List<WmsLibraryPosition> selectPostionBySshzidOrFree(String sshzid, String ckid){
        return dao.selectPostionBySshzidOrFree(sshzid,ckid);
    }
    /**
     * 查询（根据类型查询库位）
     * @param lx 主键ID
     * @return User
     */
    public List<WmsLibraryPosition> baseSelectByLx(String lx, String mc, String ckid){
        return dao.baseSelectByLx(lx,mc,ckid);
    }

    /**
     * 查询全部库区
     * @return
     */
    public List<WmsLibraryArea> addSearchArea(String mc, String ckid){
        if(mc!=null && !"".equals(mc)){

        }else{
            PageHelper.startPage(1,20);
        }
        return dao.addSearchArea(mc,ckid);
    }
    /**
     * 查询（根据d_type查询）
     * @param type 字典分组名称
     * @return SysDictionary
     */
    public List<SysDictionary> baseSelectByType(String type ){
        return dao.baseSelectByType( type);
    }

    /**
     * 用户编号查询货主编号
     * @param Id
     * @return
     */
    public String searchHzId(String Id ){
        return dao.searchHzId( Id );
    }

    /**
     * 添加前的去除重复
     * @param mc
     * @return
     */
    public void searchADD(String mc, String ckid) throws Exception {
        WmsLibraryPosition wmsLibraryPosition =dao.searchADD( mc,ckid);
        if(wmsLibraryPosition!=null){
            //无效
            if("0".equals(wmsLibraryPosition.getSfyx())){
                throw new ServiceException(mc+"名称已存在,该库位已失效");
            }else{
                //有效
                throw new ServiceException("库位名称重复");
            }
        }
    }
    /**
     * 查询当前仓库信息
     * @return
     */
    public WmsWarehouse searchCK(){
        return dao.searchCK();
    }

    /**
     * 修 改 所有的改货主ID下所有库位归零
     * @param sshzid 所属货主ID
     * @return int
     */
    public Integer baseUpdateALLZero(String sshzid){
        return dao.baseUpdateALLZero( sshzid);
    }
    /**
     *根据名称查询库位
     * @param mc 库位名称
     * @return int
     */
    public List<WmsLibraryPosition> selectBymc(String sshzid, String mc, String ckid){
        return dao.selectBymc(sshzid,mc,ckid);
    }

    /**
     * 编辑保存去重
     * @param mc
     * @param id
     * @return
     */
    public WmsLibraryPosition searchADDs(String mc, String id, String ckid,String sshzid){
        return dao.searchADDs(mc,id,ckid,sshzid);
    }
    /**
     * 查询暂存区的库位模糊查询
     * @param mc
     * @param sshzid
     * @return
     */
    @BaseServiceDescribe(moduleName = "码盘收货",btnName = "查询暂存库位")
    public List<WmsLibraryPosition> searchZcqkws(String mc, String kwlx, String sshzid, String ckid)throws ServiceException {
        try{
            return dao.searchZcqkws(mc,kwlx,sshzid,ckid);
        }catch (Exception e){
            throw new ServiceException("查询暂存库位失败",e);
        }
    }

}
